package Risk.Moteur;

import java.io.Serializable;

import java.util.Collections;
import java.util.Vector;

/**
 *  Pile de cartes
 *     @version    1.0, 07/12/26
 *   @author     Alexandre LIGUORI
 */
public class PileCartes implements Serializable {

    // Sebastien : Ajout d'un champ pour securiser la serialisation
    private static final long	serialVersionUID = 12L;
    private Vector<Carte>	pileDeCartes;

    /**
     * Construteur d'une pile de cartes
     *
     */
    public PileCartes() {
	this.pileDeCartes = new Vector<Carte>();
    }

    /**
     * ajoute une carte
     * @param val la carte
     * @return true si reussi, false sinon
     */
    public boolean ajouteCarte(Carte val) {
	return this.pileDeCartes.add(val);
    }

    public boolean ajouteCartes(Vector<Carte> defausse) {
	return this.pileDeCartes.addAll(defausse);
    }

    /**
     * Test si la pile de carte est vide
     * @return true si vide, false sinon
     */
    protected boolean estVide() {
	return pileDeCartes.isEmpty();
    }

    /**
     * initialise la pile de carte avec le plateau (pour recupere les pays associes au carte)
     * @param plateau le plateau
     */
    public void initialisePile(Plateau plateau) {
	for (Continent conti : plateau.getContinents()) {
	    for (Pays pays : conti.getPaysContinent()) {
		ajouteCarte(new Carte(pays));
	    }
	}
    }

    /**
     * melange la pile de carte
     */
    public void melange() {
	Collections.shuffle(pileDeCartes);
    }

    /**
     * Pour piocher une carte
     * @return la carte pioche
     */
    public Carte tireCarte() {
	return this.pileDeCartes.remove(0);
    }

    /**
     * to string
     * @return string
     */
    @Override
    public String toString() {
	return pileDeCartes.toString();
    }

    /**
     * renvoie la pile de cartes
     * @return la liste des carte de la pile
     */
    public Vector<Carte> getPileDeCartes() {
	return pileDeCartes;
    }
}
